Skip to main content

Jaeger

Jaeger - An Open Source and End-to-End Distributed Tracing System

Introduction

Jaeger, inspired by Dapper and OpenZipkin, is a distributed tracing system released as open source by Uber Technologies. It is used for monitoring and troubleshooting microservices-based distributed systems, including:

  • Distributed context propagation
  • Distributed transaction monitoring
  • Root cause analysis
  • Service dependency analysis
  • Performance / latency optimization

Problems That Jaeger Addresses

  • Distributed transaction monitoring
  • Performance and latency optimization
  • Root cause analysis
  • Service dependency analysis
  • Distributed context propagation

Features

  • OpenTracing compatible data model and instrumentation libraries in Go, Java, Node, Python, C++ and C#
  • Uses consistent upfront sampling with individual per service/endpoint probabilities
  • Multiple storage backends: Cassandra, Elasticsearch, memory
  • System topology graphs
  • Adaptive sampling
  • Post-collection data processing pipeline

Why Jaeger ?

As on-the-ground microservice practitioners are quickly realizing, the majority of operational problems that arise when moving to a distributed architecture are ultimately grounded in two areas: networking and observability. It is simply an orders of magnitude larger problem to network and debug a set of intertwined distributed services versus a single monolithic application.

Terminology And Components

  • Jaeger presents execution requests as traces. A trace shows the data/execution path through a system.
  • A trace is made up of one or more spans. A span is a logical unit of work in Jaeger. Each span includes the operation name, start time, and duration. Spans may be nested and ordered.
  • Jaeger includes several components that work together to collect, store and visualize spans and traces.
  • Jaeger Client includes language-specific implementations of the OpenTracing API for distributed tracing. These can be used manually or with a variety of open source frameworks.
  • Jaeger Agent is a network daemon that listens for spans sent over User Datagram Protocol. The agent is meant to be placed on the same host as the instrumented application. This is usually implemented through a sidecar in container environments like Kubernetes.
  • Jaeger Collector receives spans and places them in a queue for processing.
  • Collectors require a persistent storage backend, so Jaeger also has a pluggable mechanism for span storage.
  • Query is a service that retrieves traces from storage.
  • Jaeger Console is a user interface that lets you visualize your distributed tracing data.

Client Libraries

All Jaeger client libraries support the OpenTracing APIs. The following resources provide more information about instrumenting the application with OpenTracing:

Supported Libraries

  • Go
  • Java
  • Python
  • Node.js
  • C++
  • C#

Deployment

  • Kubernetes
  • Frontend/UI
  • CLI Flags
  • Security
  • On Windows

See Also :